The purpose of the following analysis was to recommend a future clinic site to MonashIVF QLD, based on the optimum middle point in relation to the current clinics and the hospital locations.
The analysis considered the distance and driving duration from the current clinic locations to the future site and on to the hospital.It was necessary to create tables containing the latitudes and longitudes for the current clinics, hospital and potential new sites.
The potential new sites latitudes and longitudes, (below figure) reveal that 4 of the 5 potential locations are within a 1km radius of each other on the rivers north side between Auchenflower and Milton. Where the remaining location is between 5-6km further north in Bowen Hills. This indication that there could be minimal differences in travel time between the 4 locations by the river to the current clinics.
FutureSites <- select(df_future, c(2:4))
# PLOT WITH LEAFLET
FutureLocation <- leaflet() %>% addTiles() %>%
setView(153.003,-27.475, 11) %>%
addAwesomeMarkers(lng =df_future$lon, lat = df_future$lat,
icon = icon.orange,
label = FutureSites$rooms) %>%
addCircles(lng = df_future$lon[1], lat = df_future$lat[1], radius = 1000)
FutureLocation
Figure: Potential locations on map of Brisbane
#FutureSitesDistance <- osrmTrip(loc = FutureSites)
#FutureSitesDistance <- FutureSitesDistance[[1]]$trip
#FutureSitesDistanceSummary <- FutureSitesDistance@data %>%
# mutate(distance = round(distance, 1),
# duration = round(duration, 1))
#FutureSitesDistanceSummary <- select(FutureSitesDistanceSummary, c(1:2),4)
#FutureSitesDistanceSummary <- FutureSitesDistanceSummary %>%
# rename(
# Start = start,
# End = end,
# 'Distance (km)' = distance)
#write.csv(FutureSitesDistanceSummary, "FutureSitesDistanceSummary.csv")
FutureSitesDistanceSummary<-read.csv("FutureSitesDistanceSummary.csv")
FutureSitesDistanceSummary <- kbl(FutureSitesDistanceSummary) %>% kable_styling(bootstrap_options = c("striped", "hover", "responsive"),
full_width = F, position = "center")
FutureSitesDistanceSummary
| Start | End | Distance..km. |
|---|---|---|
| 339 Coronation Drive, QLD 4064 | 33 Park Road, QLD 4064 | 0.5 |
| 33 Park Road, QLD 4064 | Kings Row Office Park, QLD 4064 | 0.4 |
| Kings Row Office Park, QLD 4064 | 141 Campbell St, QLD 4006 | 4.3 |
| 141 Campbell St, QLD 4006 | RiverCity Private Hospital, QLD 4066 | 5.6 |
| RiverCity Private Hospital, QLD 4066 | 339 Coronation Drive, QLD 4064 | 1.1 |
Table: Distance between potential locations
The below visualisation displays an hour-long drive time polygons from the five potential new sites at 10-minute intervals. It indicates that there is relatively little difference in distance a commuter can travel across these 10-minute intervals from the potential new sites locations as the polygons are nearly identical.
#Polygons using osrm API and Isochrone
iso1 <- osrmIsochrone(loc = c(df_future$lon[1], df_future$lat[1]), breaks = seq(from = 0,to = 60, by = 10))
iso2 <- osrmIsochrone(loc = c(df_future$lon[2], df_future$lat[2]), breaks = seq(from = 0,to = 60, by = 10))
iso3 <- osrmIsochrone(loc = c(df_future$lon[3], df_future$lat[3]), breaks = seq(from = 0,to = 60, by = 10))
iso4 <- osrmIsochrone(loc = c(df_future$lon[4], df_future$lat[4]), breaks = seq(from = 0,to = 60, by = 10))
iso5 <- osrmIsochrone(loc = c(df_future$lon[5], df_future$lat[5]), breaks = seq(from = 0,to = 60, by = 10))
#Adding text for legend
iso1@data$drive_times <- factor(paste(iso1@data$min, "to", iso1@data$max, "min"))
#Adding drive time colour
factpal <- colorFactor("RdYlBu", iso1@data$drive_times)
#Map
leaflet() %>%
addTiles() %>%
addAwesomeMarkers(lng =df_future$lon, lat = df_future$lat, icon = icon.orange,
label = df_future$rooms) %>%
setView(153.003,-27.475, 9) %>%
addPolygons(fill=TRUE, stroke=TRUE, color = "black",
fillColor = ~factpal(iso1@data$drive_times),
weight=0.5, fillOpacity=0.2,
data = iso1) %>%
addPolygons(fill=TRUE, stroke=TRUE, color = "black",
fillColor = ~factpal(iso1@data$drive_times),
weight=0.5, fillOpacity=0.2,
data = iso2) %>%
addPolygons(fill=TRUE, stroke=TRUE, color = "black",
fillColor = ~factpal(iso1@data$drive_times),
weight=0.5, fillOpacity=0.2,
data = iso3) %>%
addPolygons(fill=TRUE, stroke=TRUE, color = "black",
fillColor = ~factpal(iso1@data$drive_times),
weight=0.5, fillOpacity=0.2,
data = iso4) %>%
addPolygons(fill=TRUE, stroke=TRUE, color = "black",
fillColor = ~factpal(iso1@data$drive_times),
weight=0.5, fillOpacity=0.2,
data = iso5) %>%
addLegend("bottomright", pal = factpal, values = iso1@data$drive_time, title = "Drive Time")
Figure: Hour-long drive time polygon at 10 minute intervals from possible new site locations
coordinates11 <- list(c(df_current$lon[1], df_current$lat[1]), c(df_future$lon[1], df_future$lat[1]))
coordinates12 <- list(c(df_current$lon[1], df_current$lat[1]), c(df_future$lon[2], df_future$lat[2]))
coordinates13 <- list(c(df_current$lon[1], df_current$lat[1]), c(df_future$lon[3], df_future$lat[3]))
coordinates14 <- list(c(df_current$lon[1], df_current$lat[1]), c(df_future$lon[4], df_future$lat[4]))
coordinates15 <- list(c(df_current$lon[1], df_current$lat[1]), c(df_future$lon[5], df_future$lat[4]))
coordinates21 <- list(c(df_current$lon[2], df_current$lat[2]), c(df_future$lon[1], df_future$lat[1]))
coordinates22 <- list(c(df_current$lon[2], df_current$lat[2]), c(df_future$lon[2], df_future$lat[2]))
coordinates23 <- list(c(df_current$lon[2], df_current$lat[2]), c(df_future$lon[3], df_future$lat[3]))
coordinates24 <- list(c(df_current$lon[2], df_current$lat[2]), c(df_future$lon[4], df_future$lat[4]))
coordinates25 <- list(c(df_current$lon[2], df_current$lat[2]), c(df_future$lon[5], df_future$lat[5]))
coordinates31 <- list(c(df_current$lon[3], df_current$lat[3]), c(df_future$lon[1], df_future$lat[1]))
coordinates32 <- list(c(df_current$lon[3], df_current$lat[3]), c(df_future$lon[2], df_future$lat[2]))
coordinates33 <- list(c(df_current$lon[3], df_current$lat[3]), c(df_future$lon[3], df_future$lat[3]))
coordinates34 <- list(c(df_current$lon[3], df_current$lat[3]), c(df_future$lon[4], df_future$lat[4]))
coordinates35 <- list(c(df_current$lon[3], df_current$lat[3]), c(df_future$lon[5], df_future$lat[5]))
coordinates41 <- list(c(df_current$lon[4], df_current$lat[4]), c(df_future$lon[1], df_future$lat[1]))
coordinates42 <- list(c(df_current$lon[4], df_current$lat[4]), c(df_future$lon[2], df_future$lat[2]))
coordinates43 <- list(c(df_current$lon[4], df_current$lat[4]), c(df_future$lon[3], df_future$lat[3]))
coordinates44 <- list(c(df_current$lon[4], df_current$lat[4]), c(df_future$lon[4], df_future$lat[4]))
coordinates45 <- list(c(df_current$lon[4], df_current$lat[4]), c(df_future$lon[5], df_future$lat[5]))
coordinatesH1 <- list(c(df_hospital$lon[1], df_hospital$lat[1]), c(df_future$lon[1], df_future$lat[1]))
coordinatesH2 <- list(c(df_hospital$lon[1], df_hospital$lat[1]), c(df_future$lon[2], df_future$lat[2]))
coordinatesH3 <- list(c(df_hospital$lon[1], df_hospital$lat[1]), c(df_future$lon[3], df_future$lat[3]))
coordinatesH4 <- list(c(df_hospital$lon[1], df_hospital$lat[1]), c(df_future$lon[4], df_future$lat[4]))
coordinatesH5 <- list(c(df_hospital$lon[1], df_hospital$lat[1]), c(df_future$lon[5], df_future$lat[5]))
# find route
route11 <- ors_directions(coordinates11, format="geojson")
route12 <- ors_directions(coordinates12, format="geojson")
route13 <- ors_directions(coordinates13, format="geojson")
route14 <- ors_directions(coordinates14, format="geojson")
route15 <- ors_directions(coordinates15, format="geojson")
route21 <- ors_directions(coordinates21, format="geojson")
route22 <- ors_directions(coordinates22, format="geojson")
route23 <- ors_directions(coordinates23, format="geojson")
route24 <- ors_directions(coordinates24, format="geojson")
route25 <- ors_directions(coordinates25, format="geojson")
route31 <- ors_directions(coordinates31, format="geojson")
route32 <- ors_directions(coordinates32, format="geojson")
route33 <- ors_directions(coordinates33, format="geojson")
route34 <- ors_directions(coordinates34, format="geojson")
route35 <- ors_directions(coordinates35, format="geojson")
route41 <- ors_directions(coordinates41, format="geojson")
route42 <- ors_directions(coordinates42, format="geojson")
route43 <- ors_directions(coordinates43, format="geojson")
route44 <- ors_directions(coordinates44, format="geojson")
route45 <- ors_directions(coordinates45, format="geojson")
routeH1 <- ors_directions(coordinatesH1, format="geojson")
routeH2 <- ors_directions(coordinatesH2, format="geojson")
routeH3 <- ors_directions(coordinatesH3, format="geojson")
routeH4 <- ors_directions(coordinatesH4, format="geojson")
routeH5 <- ors_directions(coordinatesH5, format="geojson")
TravelTime <- leaflet() %>% addTiles() %>%
setView(153.003,-27.475, 11) %>%
addMarkers(lng =df_current$lon, lat = df_current$lat,
popup = df_current$rooms, label = df_current$rooms) %>%
addAwesomeMarkers(lng =df_hospital$lon, lat = df_hospital$lat, label = df_hospital$hospitals, icon = icon.red) %>%
addAwesomeMarkers(lng =df_future$lon, lat = df_future$lat, icon = icon.orange, label = df_future$rooms) %>%
addPolygons(fill=TRUE, stroke=TRUE, color = "black",
fillColor = ~factpal(iso1@data$drive_times),
weight=0.5, fillOpacity=0.2,
data = iso1) %>%
addGeoJSON(route11, fill=FALSE) %>% addGeoJSON(route12, fill=FALSE) %>%
addGeoJSON(route13, fill=FALSE) %>% addGeoJSON(route14, fill=FALSE) %>%
addGeoJSON(route15, fill=FALSE) %>%
addGeoJSON(routeH1, fill=FALSE) %>% addGeoJSON(routeH2, fill=FALSE) %>%
addGeoJSON(routeH3, fill=FALSE) %>% addGeoJSON(routeH4, fill=FALSE) %>%
addGeoJSON(routeH5, fill=FALSE) %>%
addGeoJSON(route21, fill=FALSE) %>% addGeoJSON(route22, fill=FALSE) %>%
addGeoJSON(route23, fill=FALSE) %>% addGeoJSON(route24, fill=FALSE) %>%
addGeoJSON(route25, fill=FALSE) %>%
addGeoJSON(route31, fill=FALSE) %>% addGeoJSON(route32, fill=FALSE) %>%
addGeoJSON(route33, fill=FALSE) %>% addGeoJSON(route34, fill=FALSE) %>%
addGeoJSON(route35, fill=FALSE) %>%
addGeoJSON(route41, fill=FALSE) %>% addGeoJSON(route42, fill=FALSE) %>%
addGeoJSON(route43, fill=FALSE) %>% addGeoJSON(route44, fill=FALSE) %>%
addGeoJSON(route45, fill=FALSE) %>%
addLegend("bottomright", pal = factpal, values = iso1@data$drive_time, title = "Drive Time")
TravelTime
Figure: Travel routes from possible new locations to current sites
# route length in kilometres and duration in hours
DD11 <-round(unlist(route11$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD11 <- data.frame(t(DD11))
DD11 <- DD11 %>% add_column(Future = df_future$rooms[1], Current = df_current$rooms[1])
DD12 <-round(unlist(route12$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD12 <- data.frame(t(DD12))
DD12 <- DD12 %>% add_column(Future = df_future$rooms[2], Current = df_current$rooms[1])
DD13 <-round(unlist(route13$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD13 <- data.frame(t(DD13))
DD13 <- DD13 %>% add_column(Future = df_future$rooms[3], Current = df_current$rooms[1])
DD14 <-round(unlist(route14$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD14 <- data.frame(t(DD14))
DD14 <- DD14 %>% add_column(Future = df_future$rooms[4], Current = df_current$rooms[1])
DD15 <-round(unlist(route15$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD15 <- data.frame(t(DD15))
DD15 <- DD15 %>% add_column(Future = df_future$rooms[5], Current = df_current$rooms[1])
# route length in kilometres and duration in hours
DD21 <-round(unlist(route21$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD21 <- data.frame(t(DD21))
DD21 <- DD21 %>% add_column(Future = df_future$rooms[1], Current = df_current$rooms[2])
DD22 <-round(unlist(route22$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD22 <- data.frame(t(DD22))
DD22 <- DD22 %>% add_column(Future = df_future$rooms[2], Current = df_current$rooms[2])
DD23 <-round(unlist(route23$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD23 <- data.frame(t(DD23))
DD23 <- DD23 %>% add_column(Future = df_future$rooms[3], Current = df_current$rooms[2])
DD24 <-round(unlist(route24$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD24 <- data.frame(t(DD24))
DD24 <- DD24 %>% add_column(Future = df_future$rooms[4], Current = df_current$rooms[2])
DD25 <-round(unlist(route25$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD25 <- data.frame(t(DD25))
DD25 <- DD25 %>% add_column(Future = df_future$rooms[5], Current = df_current$rooms[2])
# route length in kilometres and duration in hours
DD31 <-round(unlist(route31$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD31 <- data.frame(t(DD31))
DD31 <- DD31 %>% add_column(Future = df_future$rooms[1], Current = df_current$rooms[3])
DD32 <-round(unlist(route32$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD32 <- data.frame(t(DD32))
DD32 <- DD32 %>% add_column(Future = df_future$rooms[2], Current = df_current$rooms[3])
DD33 <-round(unlist(route33$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD33 <- data.frame(t(DD33))
DD33 <- DD33 %>% add_column(Future = df_future$rooms[3], Current = df_current$rooms[3])
DD34 <-round(unlist(route34$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD34 <- data.frame(t(DD34))
DD34 <- DD34 %>% add_column(Future = df_future$rooms[4], Current = df_current$rooms[3])
DD35 <-round(unlist(route35$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD35 <- data.frame(t(DD35))
DD35 <- DD35 %>% add_column(Future = df_future$rooms[5], Current = df_current$rooms[3])
# route length in kilometres and duration in hours
DD41 <-round(unlist(route41$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD41 <- data.frame(t(DD41))
DD41 <- DD41 %>% add_column(Future = df_future$rooms[1], Current = df_current$rooms[4])
DD42 <-round(unlist(route42$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD42 <- data.frame(t(DD42))
DD42 <- DD42 %>% add_column(Future = df_future$rooms[2], Current = df_current$rooms[4])
DD43 <-round(unlist(route43$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD43 <- data.frame(t(DD43))
DD43 <- DD43 %>% add_column(Future = df_future$rooms[3], Current = df_current$rooms[4])
DD44 <-round(unlist(route44$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD44 <- data.frame(t(DD44))
DD44 <- DD44 %>% add_column(Future = df_future$rooms[4], Current = df_current$rooms[4])
DD45 <-round(unlist(route45$features[[1]]$properties$summary)
/ c(1000, 60), 2)
DD45 <- data.frame(t(DD45))
DD45 <- DD45 %>% add_column(Future = df_future$rooms[5], Current = df_current$rooms[4])
DistanceDurations <- rbind(DD11, DD12, DD13, DD14, DD15,
DD21, DD22, DD23, DD24, DD25,
DD31, DD32, DD33, DD34, DD35,
DD41, DD42, DD43, DD44, DD45)
DistanceDurations <- DistanceDurations[, c(4, 3, 1, 2)]
DistanceDurations <- DistanceDurations %>%
rename(
'Future Sites' = Future,
'Current Sites' = Current,
'Duration (min)' = duration,
'Distance (km)' = distance)
DistanceDurations <- kbl(DistanceDurations) %>%
kable_styling(bootstrap_options = c("striped", "hover", "responsive"),
full_width = F, position = "center")
DistanceDurations
| Current Sites | Future Sites | Distance (km) | Duration (min) |
|---|---|---|---|
| St Andrew’s Place, QLD 4000 | 339 Coronation Drive, QLD 4064 | 3.81 | 6.80 |
| St Andrew’s Place, QLD 4000 | 33 Park Road, QLD 4064 | 2.99 | 5.60 |
| St Andrew’s Place, QLD 4000 | Kings Row Office Park, QLD 4064 | 3.39 | 6.30 |
| St Andrew’s Place, QLD 4000 | RiverCity Private Hospital, QLD 4066 | 3.78 | 6.58 |
| St Andrew’s Place, QLD 4000 | 141 Campbell St, QLD 4006 | 1.75 | 3.65 |
| Sunnybank Centre for Women, QLD 4109 | 339 Coronation Drive, QLD 4064 | 16.03 | 18.66 |
| Sunnybank Centre for Women, QLD 4109 | 33 Park Road, QLD 4064 | 15.79 | 18.45 |
| Sunnybank Centre for Women, QLD 4109 | Kings Row Office Park, QLD 4064 | 15.78 | 18.27 |
| Sunnybank Centre for Women, QLD 4109 | RiverCity Private Hospital, QLD 4066 | 16.75 | 19.68 |
| Sunnybank Centre for Women, QLD 4109 | 141 Campbell St, QLD 4006 | 17.10 | 17.77 |
| Northwest Private Hospital, QLD 4053 | 339 Coronation Drive, QLD 4064 | 11.96 | 16.30 |
| Northwest Private Hospital, QLD 4053 | 33 Park Road, QLD 4064 | 11.29 | 15.09 |
| Northwest Private Hospital, QLD 4053 | Kings Row Office Park, QLD 4064 | 11.68 | 15.78 |
| Northwest Private Hospital, QLD 4053 | RiverCity Private Hospital, QLD 4066 | 11.32 | 15.22 |
| Northwest Private Hospital, QLD 4053 | 141 Campbell St, QLD 4006 | 10.09 | 13.28 |
| North Lakes Specialist Medical Centre, QLD 4509 | 339 Coronation Drive, QLD 4064 | 38.51 | 34.29 |
| North Lakes Specialist Medical Centre, QLD 4509 | 33 Park Road, QLD 4064 | 37.84 | 33.09 |
| North Lakes Specialist Medical Centre, QLD 4509 | Kings Row Office Park, QLD 4064 | 38.24 | 33.78 |
| North Lakes Specialist Medical Centre, QLD 4509 | RiverCity Private Hospital, QLD 4066 | 38.63 | 34.06 |
| North Lakes Specialist Medical Centre, QLD 4509 | 141 Campbell St, QLD 4006 | 33.45 | 27.14 |
Table: Distance and duration between possible new locations and current sites
The specific distance and driving duration between the potential and current sites support our initial insight about the four relatively close location near the Brisbane river. These distances only vary by a couple of kilometers at the max, equating to only a few minutes different. However, the location in Bowen Hills shows a different story as it is further north it has the advantage of being closer to 3 out of 4 of the current locations by 2-4 minutes.
To continue the drive time analysis, we incorporated Googles historical traffic information to understand if the clinics are impacted by traffic differently based on their location However, this is not the case as each potential site is affected by heavy traffic condition in a similar matter. The only really noticeable difference was for the new site, Bowen Hills, where heavy traffic can have a varying impact on the travel time, adding anywhere between 20 to 50 minutes.
To finalise the duration and distance analysis the following graph, “Duration and Distance Impact on Current to Potential Future Sites”, reviews the average duration compared to the distance between the current and potential new sites. The graph is then overlaid with the impact of traffic conditions by increasing or decreasing the size of the points.
The only noticeable insight from the graph is that there is a decrease of 3 to 4 minutes in the duration for 141 Campbell St, Bowen Hills to the current clinics, Northlake and Northwest. The graph also indicates the potential issues for Bowen Hills as it has an added increase in time and duration from the Wesley Hospital. Otherwise, this graph reiterates our previous findings that their is minimal difference between the potential new site locations and the duration or distance to the current sites, as the future site generate clusters associated with the current sites.
#Following code produces an output which can be loaded in to reduce the use of the google API
#Google API connection
#key = "AIzaSyDL8XvPwNR5o_IxnqtocWfN-0m3qAH0fBs"
#Data Transformation for matrix
#current = data.frame(lon = CurrentLocations$lon, lat = CurrentLocations$lat)
#current = as.matrix(current[1:5,])
#future = data.frame(lon = df_future$lon, lat = df_future$lat)
#future = as.matrix(future[1:4,])
#doc = as_xml_document(response_matrix)
#doc = mp_matrix(
# origins = current,
# destinations = future,
# mode = "driving",
# arrival_time = NULL,
# departure_time = as.POSIXct(strptime("2021-03-03 18:00:00", "%Y-%m-%d %H:%M:%S")),
# avoid = NULL,
# region = NULL,
# traffic_model = NULL,
# key,
# quiet = FALSE)
#pessimistic = data.frame(round(mp_get_matrix(doc, value = "duration_in_traffic_s")/60, 1))
#optimistictime = data.frame(round(mp_get_matrix(doc, value = "duration_s")/60, 1))
#optimistic = data.frame(round(mp_get_matrix(doc, value = "distance_m"), 1))
#Export
#write.csv(optimistic, "optimistic.csv")
#write.csv(optimistictime, "optimistictime.csv")
#write.csv(pessimistic, "pessimistic.csv")
#qick edit in excel faster
##df.long <- pivot_longer(optimistic, cols=1:4, names_to = "TravelLocation", values_to = "Duration")
GoogleOutput <-read.csv("ClinicTravelTimes.csv")
ggplot(GoogleOutput, aes(Distance, Duration, size = Traffic)) +
xlim(0, 40) + ylim(0, 40) + labs(colour = "Future Sites") +
theme_bw() + theme(axis.line = element_line(colour = "darkgrey"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
axis.ticks = element_blank(),
panel.background = element_blank(),
axis.title = element_text(colour = "#676767")) +
geom_point(aes(color = FutureSites)) +
labs(x = "Distance from current to future sites") +
labs(y = "Duration from current to future sites") +
annotate(geom = "text", x = 27, y = 36.5, label = "North Lakes", color = "#676767") +
annotate(geom = "text", x = 21.5, y = 15, label = "SunnyBank", color = "#676767") +
annotate(geom = "text", x = 12.0, y = 25.6, label = "Northwest", color = "#676767") +
annotate(geom = "text", x = 6.0, y = 11.2, label = "St Andrew's Place", color = "#676767") +
annotate(geom = "text", x = 6.2, y = 1.5, label = "The Wesley Hospital", color = "#676767") +
geom_rect(aes(fill = "The Wesley Hospital"), xmin = 0, xmax = 5,
ymin = 2.5, ymax = 6, alpha = 0.007) +
geom_rect(aes(fill = "St Andrew's Place"),xmin = 1.4, xmax = 7,
ymin = 6.2, ymax = 10.5, alpha = 0.01) +
geom_rect(aes(fill = "Northwest"),xmin = 8, xmax = 15,
ymin = 12, ymax = 24.5, alpha = 0.01) +
geom_rect(aes(fill = "SunnyBank"),xmin = 15.2, xmax = 21,
ymin = 16, ymax = 22, alpha = 0.01) +
geom_rect(aes(fill = "Northlake"),xmin = 22, xmax = 33,
ymin = 24.5, ymax = 35.5, alpha = 0.01) +
scale_fill_manual(breaks = c("The Wesley Hospital", "St Andrew's Place", "Northwest",
"SunnyBank", "Northlake"),
values = c("yellow","green", "sky blue", "pink", "purple"),
guide = guide_legend(title = "Current Sites",
override.aes = list(alpha = 0.1)))
Figure: Distance, duration and impact of traffic between possible new locations and current sites
ImpactOfTraffic <- GoogleOutput %>%
rename(
'Future Sites' = FutureSites,
'Current Sites' = CurrentSites,
'Duration (min)' = Duration,
'Distance (km)' = Distance,
'In Traffic (min)' = Traffic)
ImpactOfTraffic <- kbl(ImpactOfTraffic) %>%
kable_styling(bootstrap_options = c("striped", "hover", "responsive"),
full_width = F, position = "center")
ImpactOfTraffic
| Current Sites | Future Sites | Duration (min) | Distance (km) | In Traffic (min) |
|---|---|---|---|---|
| North Lakes Specialist Medical Centre, QLD 4509 | 33 Park Rd, QLD 4064 | 31.1 | 28.8 | 36.5 |
| Northwest Private Hospital, QLD 4053 | 33 Park Rd, QLD 4064 | 19.5 | 14.3 | 22.3 |
| St Andrew’s Place, QLD 4000 | 33 Park Rd, QLD 4064 | 6.7 | 3.0 | 8.4 |
| Sunnybank Centre for Women, QLD 4109 | 33 Park Rd, QLD 4064 | 17.2 | 15.8 | 23.7 |
| The Wesley Hospital, QLD 4066 | 33 Park Rd, QLD 4064 | 4.1 | 1.2 | 4.3 |
| North Lakes Specialist Medical Centre, QLD 4509 | 339 Coronation Dr, QLD 4064 | 32.4 | 29.2 | 38.2 |
| Northwest Private Hospital, QLD 4053 | 339 Coronation Dr, QLD 4064 | 20.8 | 14.7 | 24.1 |
| St Andrew’s Place, QLD 4000 | 339 Coronation Dr, QLD 4064 | 7.9 | 3.5 | 10.6 |
| Sunnybank Centre for Women, QLD 4109 | 339 Coronation Dr, QLD 4064 | 17.9 | 16.0 | 24.2 |
| The Wesley Hospital, QLD 4066 | 339 Coronation Dr, QLD 4064 | 3.3 | 0.9 | 3.2 |
| North Lakes Specialist Medical Centre, QLD 4509 | Kings Row Office Park, QLD 4064 | 31.0 | 28.6 | 37.2 |
| Northwest Private Hospital, QLD 4053 | Kings Row Office Park, QLD 4064 | 19.4 | 14.1 | 22.1 |
| St Andrew’s Place, QLD 4000 | Kings Row Office Park, QLD 4064 | 6.6 | 2.8 | 8.2 |
| Sunnybank Centre for Women, QLD 4109 | Kings Row Office Park, QLD 4064 | 17.5 | 15.9 | 23.9 |
| The Wesley Hospital, QLD 4066 | Kings Row Office Park, QLD 4064 | 5.0 | 1.4 | 5.1 |
| North Lakes Specialist Medical Centre, QLD 4509 | RiverCity Private Hospital, QLD 4066 | 34.0 | 29.9 | 39.6 |
| Northwest Private Hospital, QLD 4053 | RiverCity Private Hospital, QLD 4066 | 23.1 | 12.5 | 25.4 |
| St Andrew’s Place, QLD 4000 | RiverCity Private Hospital, QLD 4066 | 9.6 | 4.1 | 11.3 |
| Sunnybank Centre for Women, QLD 4109 | RiverCity Private Hospital, QLD 4066 | 20.8 | 16.9 | 27.2 |
| The Wesley Hospital, QLD 4066 | RiverCity Private Hospital, QLD 4066 | 4.3 | 0.8 | 4.2 |
| North Lakes Specialist Medical Centre, QLD 4509 | 141 Campbell St, QLD 4006 | 26.0 | 24.3 | 37.8 |
| Northwest Private Hospital, QLD 4053 | 141 Campbell St, QLD 4006 | 13.0 | 9.5 | 20.5 |
| St Andrew’s Place, QLD 4000 | 141 Campbell St, QLD 4006 | 5.8 | 3.9 | 7.6 |
| Sunnybank Centre for Women, QLD 4109 | 141 Campbell St, QLD 4006 | 18.1 | 18.6 | 26.2 |
| The Wesley Hospital, QLD 4066 | 141 Campbell St, QLD 4006 | 9.3 | 5.8 | 14.0 |
Table: Distance, duration and impact of traffic between possible new locations and current sites
The below graph is a weighted analysis of how many doctors currently view patients at each clinic and the location of the future clinics. It is clearly visible that majority of the doctors work out of the The Wesley Hospital and would be beneficial to locate the new clinic with close proximity to this hospital to allow the doctors to have easier access.
spatialanalysis <-read.csv("spatialanalysis.csv")
p <- ggplot(spatialanalysis, aes(lat, lon, text = paste("Clinic:", rooms), color = site, size = doctors)) +
geom_point() + scale_colour_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"),
guide = guide_legend(title = "Sites",
override.aes = list(alpha = 1))) +
theme_bw() + theme(axis.line = element_blank(),
axis.title = element_blank(),
axis.ticks = element_blank(),
axis.text = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
panel.grid = element_blank()) +
labs(title = "Future Clinic Location",
subtitle = "Comparing current locations, potential sites and number of doctors")
ggplotly(p)
Figure: Proximity of new locations to current sites overlay with the number of doctors
The below map display MonashIVF’s competitors across the state. There is currently no competitors located with a 1km radius of the potential sites on the river. The Bowen Hills sites is approximately 2km from a current City Fertility site.
FutureSites <- select(df_future, c(2:4))
CompetitorSites <- select(df_competitor, c(1,3:4))
# PLOT WITH LEAFLET
CompetitorLocation <- leaflet() %>% addTiles() %>%
setView(153.003,-27.475, 10) %>%
addAwesomeMarkers(lng =df_future$lon, lat = df_future$lat,
icon = icon.orange,
label = FutureSites$rooms) %>%
addAwesomeMarkers(lng =CompetitorSites$lon, lat = CompetitorSites$lat,
icon = icon.green,
label = CompetitorSites$Competitor) %>%
addMarkers(lng =df_current$lon, lat = df_current$lat,
popup = df_current$rooms, label = df_current$rooms) %>%
addAwesomeMarkers(lng =df_hospital$lon, lat = df_hospital$lat,
label = df_hospital$hospitals, icon = icon.red) %>%
addCircles(lng = df_future$lon[1], lat = df_future$lat[1], radius = 1000)
CompetitorLocation
Figure: Location of competitors, current sites and potential sites
After reviewing each of the above piece of analysis it is clear there is little different in the proposed location for the future MonashIVF clinic in QLD based on the duration or drive time to the current clinics and hospital. The main insight would be to understand the importance of the clinics location to the hospital where the majority of the doctors are located. If this was the case then the Bowen Hills location would be rules out as an option. A location a long the river also appears to be an beneficial spot as there are currently no direct competitors operating out of this area.
To further this analysis we could review the cost of sites, parking options for customers and the current location of customers in relation to these sites. If we were to understand the customers location in r to see if there is a location that is not currently serviced by MonashIVf or their competitors.
Notitia Pty Ltd is a business recorded on the Australian Securities and Investments Commission (ASIC) register under section 33(8) of the Business Names Registration Act 2011. ABN 62 632 290 094